#include "task.h"


/**************************************************************************************
* Variable definition                            
**************************************************************************************/
typedef enum _TASK_LIST
{
	TAST_DISP_CLOCK,          	// 显示时钟
	TAST_KEY_SCAN,             	// 按键扫描
	TASK_DISP_WS,				// 工作状态显示
	TASK_STATE_LED, //状态LED显示
	// 这里添加你的任务...
	TASKS_MAX                 	// 总的可供分配的定时任务数目
} TASK_LIST;

// 任务结构
typedef struct _TASK_COMPONENTS
{
	uint8 Run;                  // 程序运行标记：0-不运行，1运行
	uint8 Timer;                // 计时器
	uint8 ItvTime;              // 任务运行间隔时间
	uint8 TaskCode;				// void (*TaskHook)(void); //要运行的任务函数 义隆不支持指针函数
} TASK_COMPONENTS;       		// 任务定义

static TASK_COMPONENTS TaskComps[] = 
{
	{0, 60, 60, TAST_DISP_CLOCK},    // 显示时钟
	{0, 20, 20, TAST_KEY_SCAN},       // 按键扫描
	{0, 30, 30, TASK_DISP_WS},       // 显示工作状态
	{0, 300,300, TASK_STATE_LED}
	
	// 这里添加你的任务。。。。
};

/**************************************************************************************
* FunctionName   : TaskRemarks()
* Description    : 任务标志处理
* EntryParameter : None
* ReturnValue    : None
* attention      : ***在定时器中断中调用此函数***
**************************************************************************************/
void TaskRemarks(void)
{
	uint8 i;
	
	for (i=0; i<TASKS_MAX; i++)          	// 逐个任务时间处理
	{
		if (TaskComps[i].Timer)          		// 时间不为0
		{
			TaskComps[i].Timer--;         		// 减去一个节拍
			if (TaskComps[i].Timer == 0)     	// 时间减完了
			{
				TaskComps[i].Timer = TaskComps[i].ItvTime; // 恢复计时器值，从新下一次
				TaskComps[i].Run = 1;        	// 任务可以运行
			}
		}
	}
}

/**************************************************************************************
* FunctionName   : TaskProcess()
* Description    : 任务处理|判断什么时候该执行那一个任务
* EntryParameter : None
* ReturnValue    : None
* * attention      : ***在mian的while(1)中调用***
**************************************************************************************/
void TaskProcess(void)
{
	uint8 i;
	
	for (i=0; i<TASKS_MAX; i++)           	// 逐个任务时间处理
	{
		if (TaskComps[i].Run)           	// 时间不为0
		{
			// 运行任务
			switch(TaskComps[i].TaskCode)
			{
				case 0:
				TaskDisplayClock();
				break;
				case 1:
				TaskKeyScan();
				break;
				case 2:
				TaskDispStatus();
				break;
				case 3:
				TaskStateLed();
				break;
			}
			TaskComps[i].Run = 0;          	// 标志清0
		}
	}   
}
/**************************************************************************************
* FunctionName   : TaskDisplayClock()
* Description    : 显示任务

* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
void TaskDisplayClock(void)
{
	
}

/**************************************************************************************
* FunctionName   : TaskKeyScan()
* Description    : 扫描任务
* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
void TaskKeyScan(void)
{
	ScanSingleKey();
}

/**************************************************************************************
* FunctionName   : TaskDispStatus()
* Description    : 工作状态显示
* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
void TaskDispStatus(void)
{
	
}
/**************************************************************************************
* FunctionName   : TaskStateLed()
* Description    : 控制状态LED闪烁状态
* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
void TaskStateLed(void)
{
	OnOffStateLed();
}
// 下面添加其他任务...


